
#include "BarraDeFerramentas/BotaoRoberts.h"
#include "PetLab.h"

static int s_ordem = 3;

void OperacaoRoberts(Tela& tela)
{
    MatrizRGBA copia;
    copia = tela.Matriz();
    
    for(int i=0; i<tela.Largura(); i++)
        for(int j=0; j<tela.Altura(); j++)
        {
            int r1 = BANDA_R(copia[i][j]);
            int g1 = BANDA_G(copia[i][j]);
            int b1 = BANDA_B(copia[i][j]);
            
            r1 -= BANDA_R(copia[i+1][j+1]);
            g1 -= BANDA_G(copia[i+1][j+1]);
            b1 -= BANDA_B(copia[i+1][j+1]);

            if(r1<0) r1 *= -1;
            if(g1<0) g1 *= -1;
            if(b1<0) b1 *= -1;

            int r2 = BANDA_R(copia[i+1][j]);
            int g2 = BANDA_G(copia[i+1][j]);
            int b2 = BANDA_B(copia[i+1][j]);

            r2 -= BANDA_R(copia[i][j+1]);
            g2 -= BANDA_G(copia[i][j+1]);
            b2 -= BANDA_B(copia[i][j+1]);

            if(r2<0) r2 *= -1;
            if(g2<0) g2 *= -1;
            if(b2<0) b2 *= -1;
            
            int r = (r1+r2)/2;
            int g = (g1+g2)/2;
            int b = (b1+b2)/2;
            
            if(r>255) r=255;
            if(g>255) g=255;
            if(b>255) b=255;

            tela.Set(i, j, RGBA(r, g, b, 255));
        }
 
    tela.Redesenhar();
}


BotaoRoberts::BotaoRoberts(int cx, int cy, int x, int y)
    : Botao(cx, cy, x, y)
{
    Matriz().Retangulo(0,0,cx,cy,RGBA(0,0,0,0));
    Matriz().Retangulo(0,0,cx-1,cy-1,RGBA(8,108,245,128+32),2);

    Texto* texto = new Texto("Roberts", 12, 1);
    texto->Fonte("verdana", 13, RGBA(215,215,215,255));
    AdicionarControle(texto);
}


bool BotaoRoberts::AoBaixarEsq(EventoBaixarEsq ev)
{
    s_ordem = g_PetLab->Ferramentas()->Suavizacao()->Mascara()->Ordem();
    OperacaoRoberts(*(g_PetLab->m_PainelA->Tela()));
    g_PetLab->m_PainelB->Tela()->Carregar(g_PetLab->m_PainelA->Tela());

	return false;
}
